//package com.ly.mpayment.core.util;
//
//import java.lang.reflect.Field;
//import java.text.SimpleDateFormat;
//import java.util.Arrays;
//import java.util.Collection;
//import java.util.Date;
//import java.util.Locale;
//import java.util.Set;
//
//import javax.swing.text.html.parser.Entity;
//
//import net.sf.json.JSONArray;
//import net.sf.json.JSONObject;
//import net.sf.json.JsonConfig;
//import net.sf.json.processors.JsonValueProcessor;
//import net.sf.json.util.CycleDetectionStrategy;
//import net.sf.json.util.PropertyFilter;
//
//public class JSONIgnoreField implements PropertyFilter {
//	// Log log = LogFactory.getLog(this.getClass());
//
//	/**
//	 * 忽略的属性名称
//	 */
//	private String[] fields;
//
//	/**
//	 * 是否忽略集合
//	 */
//	private boolean ignoreColl = false;
//
//	/**
//	 * 空参构造方法<br/>
//	 * 默认不忽略集合
//	 */
//	public JSONIgnoreField() {
//		// empty
//	}
//
//	/**
//	 * 构造方法
//	 * 
//	 * @param fields
//	 *            忽略属性名称数组
//	 */
//	public JSONIgnoreField(String[] fields) {
//		this.fields = fields;
//	}
//
//	/**
//	 * 构造方法
//	 * 
//	 * @param ignoreColl
//	 *            是否忽略集合
//	 * @param fields
//	 *            忽略属性名称数组
//	 */
//	public JSONIgnoreField(boolean ignoreColl, String[] fields) {
//		this.fields = fields;
//		this.ignoreColl = ignoreColl;
//	}
//
//	/**
//	 * 构造方法
//	 * 
//	 * @param ignoreColl
//	 *            是否忽略集合
//	 */
//	public JSONIgnoreField(boolean ignoreColl) {
//		this.ignoreColl = ignoreColl;
//	}
//
//	public boolean apply(Object source, String name, Object value) {
//		Field declaredField = null;
//		// 忽略值为null的属性
//		if (value == null)
//			return true;
//		// 剔除自定义属性，获取属性声明类型
//		if (!"data".equals(name) && "data" != name && !"totalSize".equals(name) && "totalSize" != name) {
//			try {
//				declaredField = source.getClass().getDeclaredField(name);
//			} catch (NoSuchFieldException e) {
//				// log.equals("没有找到属性" + name);
//				e.printStackTrace();
//			}
//		}
//		// 忽略集合
//		if (declaredField != null) {
//			if (ignoreColl) {
//				if (declaredField.getType() == Collection.class || declaredField.getType() == Set.class) {
//					return true;
//				}
//			}
//		}
//
//		// 忽略设定的属性
//		if (fields != null && fields.length > 0) {
//			if (juge(fields, name)) {
//				return true;
//			} else {
//				return false;
//			}
//		}
//
//		return false;
//	}
//
//	/**
//	 * 过滤忽略的属性
//	 * 
//	 * @param s
//	 * @param s2
//	 * @return
//	 */
//	public boolean juge(String[] s, String s2) {
//		boolean b = false;
//		for (String sl : s) {
//			if (s2.equals(sl)) {
//				b = true;
//			}
//		}
//		return b;
//	}
//
//	public String[] getFields() {
//		return fields;
//	}
//
//	/**
//	 * 设置忽略的属性
//	 * 
//	 * @param fields
//	 */
//	public void setFields(String[] fields) {
//		this.fields = fields;
//	}
//
//	public boolean isIgnoreColl() {
//		return ignoreColl;
//	}
//
//	/**
//	 * 设置是否忽略集合类
//	 * 
//	 * @param ignoreColl
//	 */
//	public void setIgnoreColl(boolean ignoreColl) {
//		this.ignoreColl = ignoreColl;
//	}
//
//	// 过滤属性
//	@SuppressWarnings("static-access")
//	public static String excludes(Object object, String[] str) {
//		JSONObject ojb = new JSONObject();
//		JsonConfig config = new JsonConfig();
//		config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
//		config.setIgnoreTransientFields(true);
//		config.setExcludes(str);
//		config.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
//		// config.setJsonPropertyFilter(new IgnoreFieldProcessorImpl(true,
//		// str)); // 忽略掉name属性及集合对象
//		if (object == null) {
//			return ojb.toString();
//		}
//		return ojb.fromObject(object, config).toString();
//	}
//
//	/**
//	 * 对象转json字符
//	 * 
//	 * @param object
//	 * @return
//	 */
//	public static String objToJsonString(Object object) {
//		return new JSONObject().fromObject(object).toString();
//	}
//
//	/**
//	 * 数组转json字符
//	 * 
//	 * @param object
//	 * @return
//	 */
//	public static String JSONARRAYToJsonString(Object object) {
//		JSONObject ojb = new JSONObject();
//		JsonConfig config = new JsonConfig();
//		config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
//		config.setIgnoreTransientFields(true);
//		config.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
//		// config.setJsonPropertyFilter(new IgnoreFieldProcessorImpl(true,
//		// str)); // 忽略掉name属性及集合对象
//		if (object == null) {
//			return ojb.toString();
//		}
//		return new JSONArray().fromObject(object, config).toString();
//	}
//
//	/**
//	 * 对象转json对象
//	 * 
//	 * @param object
//	 * @return
//	 */
//	public static JSONObject objToJson(Object object) {
//		return new JSONObject().fromObject(object);
//	}
//
//	/**
//	 * 对象转json对象
//	 * 
//	 * @param object
//	 * @return
//	 */
//	@SuppressWarnings("unused")
//	public static String jsonArrayToJson(Object object, String[] str) {
//		if (object == null) {
//			return new JSONArray().toString();
//		}
//		String s[] = new String[] { "totalPages", "prePage", "nextPage", "hasPre", "hasNext", "first", "orderBySetted",
//				"order", "autoCount"};
//
//		JsonConfig config = new JsonConfig();
//		config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
//		config.setIgnoreTransientFields(true);
//		config.setExcludes(concat(str, s));
//		config.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
//		if (object == null) {
//			return new JSONArray().toString();
//		}
//		return new JSONArray().fromObject(object, config).toString();
//	}
//
//	static String[] concat(String[] a, String[] b) {
//		String[] c = new String[a.length + b.length];
//		System.arraycopy(a, 0, c, 0, a.length);
//		System.arraycopy(b, 0, c, a.length, b.length);
//		return c;
//	}
//
//	/**
//	 * 对象转json对象
//	 * 
//	 * @param object
//	 * @return
//	 */
//	public static JSONArray jsonArrayStringToJsonArray(Object object) {
//		JsonConfig config = new JsonConfig();
//		config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
//		config.setIgnoreTransientFields(true);
//		// config.setExcludes(str);
//		config.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
//		return new JSONArray().fromObject(object);
//	}
//
//	public static void main(String[] args) {
//		// JsonConfig config = new JsonConfig();
//		// config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
//		// config.setExcludes(str);
//		// config.setJsonPropertyFilter(new IgnoreFieldProcessorImpl(true, new
//		// String[] { "name" })); // 忽略掉name属性及集合对象
//
//		// Entity entity = new Entity();
//		// entity.setAddress("xxxxxxx");
//		// entity.setAge(20);
//		// entity.setName("lxb");
//		// JSONObject fromObject = JSONObject.fromObject(entity, config );
//		// System.out.print(fromObject.toString());
//		// JSONIgnoreField.objToJson(object)
//	}
//}
